シェルスクリプト case文とwhile文
case文の構造
code:case文
case 文字列 in
パターン1)
処理1
;;
パターン2)
処理2
;;
esac
末尾に)をおいたパターンとセミコロン2つで作られるブロックないに実行したい処理をかく
case の使い方そのものはPHPとかと一緒
上から順に評価されてマッチしたパターンの処理を実行する
どのパターンにもマッチしなければそのまま抜ける
code:case文の例
case "$1" in
*.txt)
less "$1"
;;
*.sh)
vi "$1"
;;
*)
echo "not supported file : $1"
;;
esac
while文・・・指定した条件が真である限り繰り返し処理を行う
code:while文
while コマンド
do
繰り返し処理
done
whileの後ろのコマンドは、ifと同じように終了ステータスによって真偽判定される
if と同様にtestコマンドによる条件式が書かれることが多い
code:whileの実行結果
i=1
do
echo "$i"
i=$((i + 2))
done
1
3
5
7
9
算術式展開
i=$((i + 2)) の部分のこと
shで書かれたシェルスクリプトは簡単な足し算をするにもexprという外部コマンドを呼ぶ必要がある
上記を書き換えるとしたら、i=\`expr $i + 2\` となるがループのたびにコマンドを呼び出すので効率が悪い
bashでは$(( ))と2重のかっこで括ることで中の文字列を計算式として扱えるというルールがある
この時シェル変数には$をつける必要がない
code:式展開の例
$ i=10
$ echo $i
10
$ echo $((i + 3))
13
$ echo $((i / 2))
5
$ echo $((i * 2))
20
$ echo $((i ** 2))
100
$